import org.junit.Test

class 闭包 {
  /**
    * 编写一个高阶函数、在函数内有一个参数，返回一个函数，通过这个变量完成一个计算
    */
  @Test
  def tees(): Unit = {
//    val f = closure()
//    val area = f(5)
//    println(area)
    //能否访问factor
    //factor在一个单独的作用域中
    //如果一个函数携带了一个外包的作用域，那么这种函数就是闭包，闭包的本质是一个特殊的类型，是一个对象
    val f = closure()

  }

  /**
    * 返回一个新的函数，
    */
  def closure(): Int => Double = {
    val factor = 3.14
    val araFunction = (r: Int) => math.pow(r, 2) * factor
    araFunction
  }
}
